package com.example.d8_homework.homework02;

import java.io.*;

public class Test {
    public static void main(String[] args) {
        /*
        需求：实现一个验证程序运行次数的小程序,要求如下：
        1.当程序运行超过3次时给出提示:本软件只能免费使用3次,欢迎您注册会员后继续使用
        2.程序运行演示如下:
        第一次运行控制台输出: 欢迎使用本软件,第1次使用免费~
        第二次运行控制台输出: 欢迎使用本软件,第2次使用免费~
        第三次运行控制台输出: 欢迎使用本软件,第3次使用免费~
        第四次及之后运行控制台输出:本软件只能免费使用3次,欢迎您注册会员后继续使用~
         */
        // 定义存储使用次数的文件路径
        String filePath = "day20-io\\src\\yu12.txt";
        // 创建文件对象
        File file = new File(filePath);
        try {
            // 读取当前的使用次数
            int count = readUsageCount(file);
            // 判断使用次数是否超过3次
            if (count >= 3) {
                // 如果使用次数超过3次,提示用户注册会员
                System.out.println("本软件只能免费使用3次,欢迎您注册会员后继续使用");
            } else {
                // 增加使用次数
                count++;
                // 输出欢迎信息
                System.out.println("欢迎使用本软件,第" + count + "次使用免费~");
                // 将新的使用次数写回文件
                writeUsageCount(file, count);
            }
        } catch (IOException e) {
            // 异常处理,打印堆栈跟踪
            e.printStackTrace();
        }
    }

    /**
     * 读取程序的使用次数
     *
     * @param file 存储使用次数的文件
     * @return 当前的使用次数
     * @throws IOException 如果读取文件时发生错误
     */
    public static int readUsageCount(File file) throws IOException {
        // 检查文件是否存在
        if (!file.exists()) {
            // 文件不存在,返回0
            return 0;
        }
        // 使用BufferedReader读取文件内容
        try (
                BufferedReader br = new BufferedReader(new FileReader(file))
        ) {
            // 读取文件的第一行
            String line = br.readLine();
            // 检查读取的内容是否为空或空白
            if (line != null && !line.trim().isEmpty()) {
                // 将读取的内容转换为整数并返回
                return Integer.parseInt(line);
            } else {
                // 文件内容为空或空白,返回0
                return 0;
            }
        }
    }

    /**
     * 将程序的使用次数写入文件
     *
     * @param file  存储使用次数的文件
     * @param count 当前的使用次数
     * @throws IOException 如果写入文件时发生错误
     */
    public static void writeUsageCount(File file, int count) throws IOException {
        // 使用BufferedWriter写入文件内容
        try (
                BufferedWriter bw = new BufferedWriter(new FileWriter(file));
        ) {
            // 将使用次数转换为字符串并写入文件
            bw.write(String.valueOf(count));
        }
    }

}
